mybatis对象或数组转成临时表join | 您所在的位置:网站首页 › java list创建 › mybatis对象或数组转成临时表join |
in数据太多导致查询延迟
工作上跨服务调用传递的id数组 然后根据数组里的id 去in 一个表。618的时候发现查询老是超时。然后我这边准备优化 对象入参变成临时表的方法一开始是想着把对象变成一个临时表 通过jion 连接去查询。 找了一下发现可以用select 1,2,3 …这种该方法 sql 的 select 可以指定常量,包括对象里面的数据。根据 mybatis 语法可以直接select #{字段名1} as amount,#{字段名2} as store_code 就可以转换这个对*象, 代码实例 /** *sql 的 select 可以指定常量,当然就包括对象里面的数据。所以根据 mybatis 语法我们*可以直接select #{字段名1} as amount,#{字段名2} as store_code 就可以转换这个对*象, */ SELECT * FROM tb_product p LEFT JOIN ( SELECT #{num} as a , #{age} as b )ab ON p.product_id = ab.a 数组入参变成临时表的方法sql语法中有个union这个操作,可以用union可以连多行数据,就像这样: select 10 as a, 30 as b union select 20 as a ,40 as bmybatis中可以用foreach 。这种方式的数据量也是在一个定值才不慢 SELECT * FROM tb_product p LEFT JOIN ( SELECT #{productId.num} as a, #{productId.age} as b )ab ON p.product_id = ab.a in方式可以改成多查询 mysql in 超过 300 个,性能就会严重下降。 建议,先写临时表,再关联查询可以拆分成多个list 多次查询比一次查询性能要快 |
CopyRight 2018-2019 实验室设备网 版权所有 |